//jQuery对Ajax操作进行了封装，
//在jQuery中$.ajax()方法属于最底层的方法，
//第2层是laod()、$.get()和$.post()方法，
//第3层是$.getScript()和$.getJSON()方法。
$(function() {

	// 任何地方的这种匿名函数“$(function(){})”都不需要调用自动执行的（如果引入了这个js文件的话）。
	var Wx_js_utils = function() {
		// alert("Test");
		// 这个类似于java中的构造函数，因为javascript中将函数也可以作为一种变量或者对象，
		// 所以，可以将一个函数这么赋值。 这里可以初始化一些东东
		// this.wx = new Tem();

//		window.alert = function(text) { //重载系统默认的alert函数
//			 text=text.toString().replace(/\\/g,'\\').replace(/\n/g,'<br />').replace(/\r/g,'<br />'); //解析alert内容中的换行符
//			 var alertdiv='<div id="alertdiv" style="position:absolute; display:none ; overflow:hidden;  padding:10px 10px 8px; top: 50%; left: 50%; text-align:center; line-height:22px; background-color:#FFA800; border:1px solid #ccc;z-index:999">'+
//			 text+'<br /><input type="submit" name="button" id="button" value="确定" style="margin-top:8px;" onclick="$(this).parent().remove(); "/></div>'; //自定义div弹窗
//			 $(document.body).append(alertdiv);  //动态加载div
//			 $("#alertdiv").css({"margin-left":$("#alertdiv").width()/2*(-1)-20,"margin-top":$("#alertdiv").height()/2*(-1)-20}); //设置偏移数值，实现div居中
//			 $("#alertdiv").show(); //显示
//		};
		
	};

	// 这里需要说说extend。Jquery的扩展方法extend是我们在写插件的过程中常用的方法，该方法有一些重载原型 Jquery的扩展方法原型是:
	// extend(dest,src1,src2,src3...);它的含义是将src1,src2,src3...合并到dest中，返回值为合并后的dest，
	// 由此可以看出该方法合并后，是修改了dest的结构的。这里相当于向Config_center类中添加函数或方法。

	// javascript支持如下形式的定义数组。数组元素用方括号“[]”括起来，然后每个元素如果是对象类型的话，
	// 每个对象用花括号“{}”括起来，然后每个属性名称与属性值之间用冒号“:”隔开，也就是json格式的。
	$.extend(
		Wx_js_utils.prototype, {

			test : function() {
				alert("wx_js_utils Test success");
			},
			test : function(msg) {
				alert(msg);
			},
			
			// function4ajax("GET","${ ctx }/itsm/config/project_task/getInfo",
			// "name=John&location=Boston",alertInfo);
			function4Ajax : function(async,methodType, url, data,
					dataType, beforeSendFunction, successFunction,
					completeFunction, errorFunction) {
				async = (async == null || async == "" || typeof (async) == "undefined") 
				? "true" : async;
				methodType = (methodType == null || methodType == "" || typeof (methodType) == "undefined") 
				? "post" : methodType;
				dataType = (dataType == null || dataType == "" || typeof (dataType) == "undefined") 
				? "json" : dataType;
				data = (data == null || data == "" || typeof (data) == "undefined") 
				? { "date" : new Date().getTime() } : data;
				beforeSendFunction = (beforeSendFunction == null || beforeSendFunction == "" || typeof (beforeSendFunction) == "undefined") 
				? null : beforeSendFunction;
				successFunction = (successFunction == null || successFunction == "" || typeof (successFunction) == "undefined") 
				? null : successFunction;
				completeFunction = (completeFunction == null || completeFunction == "" || typeof (completeFunction) == "undefined") 
				? null : completeFunction;
				errorFunction = (errorFunction == null || errorFunction == "" || typeof (errorFunction) == "undefined") 
				? null : errorFunction;
				//alert("function4ajax invoked");
				// alert("methodType: " + methodType + " \nurl: " +
				// url +" \ndata: "
				// + data + " \ndataType: " + dataType +" \nsuccessFunctio: " +  successFunction);
				
				$.ajax({
					type : methodType,
					async : async,
					url : url,
					data : data,
					dataType : dataType,
					beforeSend : beforeSendFunction,
					success : successFunction,
					complete : completeFunction,
					error : errorFunction
				});
			},
			getAjaxData:function(async,methodType, url, data,
					dataType){
				//这里能不能简单的返回获取到的数据
			},

			// 这里需要注意一下下 load()方法的URL参数的语法结构为：“url selector”。
			// 注意，URL和选择器之间有一个空格。
			// 也就是这里可以加载某个页面的某些部分到另一个地方
			// $("#div2").load('demo_ajax_load.html #d');
			// 比如上面语句加载 demo_ajax_load.html中id为#d的元素的内容到#div2中
			function4Load:function(id,url, selector,data, successFunction) {
				//这是load的用法 $("#links").load("/Main_Page #p-Getting-Started li");
				selector = (selector == null || selector == "" || typeof (selector) == "undefined") 
					? "" : selector;
				data = (data == null || data == "" || typeof (data) == "undefined") 
					? { "date" : new Date().getTime() }  : selector;
				successFunction = (successFunction == null || successFunction == "" || typeof (successFunction) == "undefined") 
					? null : successFunction;
				// alert("function4ajax invoked");
				// alert( " url: " + url +" \ndata: "
				// + data + " \ndataType: " + dataType );
				$("#" + id).load(url + " " + selector , data, successFunction);
				
			},
			


			function4GetOrPost:function(url, data,methodType, successFunction,returnDataType) {
				methodType = (methodType == null || methodType == "" || typeof (methodType) == "undefined") 
					? "get" : methodType;
				data = (data == null || data == "" || typeof (data) == "undefined") 
					? { "date" : new Date().getTime() }  : data;
				successFunction = (successFunction == null || successFunction == "" || typeof (successFunction) == "undefined") 
					? null : successFunction;
				returnDataType = (returnDataType == null || returnDataType == "" || typeof (returnDataType) == "undefined") 
					? "json" : returnDataType;
				// alert("function4ajax invoked");
				// alert( " url: " + url +" \ndata: "
				// + data + " \ndataType: " + dataType );
				if("get" == methodType){
					$.get(url, data,successFunction,returnDataType );
				}else if("post" == methodType){
					$.post(url, data,successFunction,returnDataType );
				}
			},
			getRootPath:function (){  
			    //获取当前网址，如： http://localhost:8083/proj/meun.jsp  
			    var curWwwPath = window.document.location.href;  
			    
			    //获取主机地址之后的目录，如： proj/meun.jsp  
			    var pathName = window.document.location.pathname;  
			    var pos = curWwwPath.indexOf(pathName);  
			    
			    //获取主机地址，如： http://localhost:8083  
			    var localhostPath = curWwwPath.substring(0, pos);  
			    
			    //获取带"/"的项目名，如：/proj  
			    var projectName = pathName.substring(0, pathName.substr(1).indexOf('/')+1);  
			    
			    return(localhostPath + projectName);  
			}//end
			
			
		});

	// new Wx_js_utils()相当于调用了构造方法，创建了一个Wx_js_utils的对象。
	// 然后又因为这个对象被赋值给了window对象的一个属性，也就是在任意地方可以这么调用这个对象：
	// wx.testFunc。省略了window。
	window.wx = new Wx_js_utils();
});
